package net.cyue.ort.llm.sampling;

import net.cyue.ort.llm.data.Token;

import java.util.List;

/**
 * 采样策略接口
 * 负责根据logits选择下一个token
 * 遵循开闭原则，支持多种采样策略
 */
public interface SamplingStrategy {
    /**
     * 从logits中选择下一个token
     * @param logits token的logits数组
     * @param context 上下文token ID列表
     * @param config 采样配置
     * @return 选中的token
     */
    Token selectNextToken(float[] logits, List<Long> context, SamplingConfig config);
    
    /**
     * 从logits中选择top-N个token候选
     * @param logits token的logits数组
     * @param context 上下文token ID列表
     * @param config 采样配置
     * @param topN 需要返回的候选数量
     * @return token候选列表
     */
    List<Token> selectTopNTokens(float[] logits, List<Long> context, SamplingConfig config, int topN);
}

